perm filename DATRAN.SAI[SYS,HE] blob sn#057816 filedate 1973-08-14 generic text, type T, neo UTF8
COMMENT ⊗   VALID 00007 PAGES 
RECORD PAGE   DESCRIPTION
 00001 00001
 00002 00002	BEGIN "DATRAN" COMMENT PROGRAM TO MANIPULATE CALIBRATION FILES
 00005 00003	α	VARIABLES AND COPYING PROCEDURES
 00007 00004	α	PARSE SPECIFICATIONS - FALSE IF ERROR
 00009 00005	α	DISPLAY ROUTINE
 00013 00006	α	READ AND WRITE COMPOSITE DATA SETS
 00016 00007	α	HERE IS THE MAIN PROGRAM
 00019 ENDMK
⊗;
BEGIN "DATRAN" COMMENT PROGRAM TO MANIPULATE CALIBRATION FILES;
REQUIRE "UTIL" LOAD_MODULE, "DPYSUB.HDR[1,PDQ]" SOURCE_FILE;
REQUIRE "⊂⊃||" DELIMITERS;
DEFINE α=⊂COMMENT⊃, CRLF=⊂'15&'12⊃, SAFEX=⊂ ⊃, OLD=⊂1⊃, NEWX=⊂2⊃;
EXTERNAL STRING PROCEDURE DATIM;
EXTERNAL PROCEDURE COMIN;
EXTERNAL PROCEDURE COMOUT;
EXTERNAL PROCEDURE COMWRITE;
EXTERNAL PROCEDURE LPTDMP;
EXTERNAL BOOLEAN PROCEDURE COMREAD;

α FUNCTION DEFINITIONS;

DEFINE	ARY_TO_ARY(V,I)=⊂VARS[COPA,LENSA,I]←VARS[COPX,LENS,I]⊃,
	ARY_TO_VAR(V,I)=⊂V ← VARS[COPX,LENS,I]⊃,
	VAR_TO_ARY(V,I)=⊂VARS[COPX,LENS,I] ← V⊃,
	DIFFERENCE(V,I)=⊂V ← V-VARS[COPX,LENS,I]⊃,
	COPY(FUNC)=⊂	BEGIN
		FUNC(ZPOT0,1);
		FUNC(ZPOTD,2);
		FUNC(PPOT0,3);
		FUNC(PPOTD,4);
		FUNC(TPOT0,5);
		FUNC(TPOTD,6);
		FUNC(FPOT0,7);
		FUNC(FPOTD,8);
		FUNC(MRAT,9);
		FUNC(SWING,10);
		FOR I←1 STEP 1 UNTIL 2 DO FUNC(PP[I],10+I);
		FOR I←1 STEP 1 UNTIL 3 DO FUNC(P0[I],12+I);
		FOR I←1 STEP 1 UNTIL 3 DO FUNC(DP[I],15+I);
		FUNC(DATE,19);
		FUNC(TIME,20);
		FUNC(GROREF,21);
		FUNC(FOCAL,22);
		FUNC(OFFSET,23);
		FUNC(FSCALE,24);
		FUNC(FMX,25);
		FUNC(FMY,26);
		FUNC(PAN,27);
		FUNC(TILT,28);
		FUNC(CALERR,29);
		FOR I←1 STEP 1 UNTIL 3 DO FUNC(C[I],29+I);
		FUNC(DEV,33);
		FOR I←1 STEP 1 UNTIL 2 DO FUNC(COEFF[I],33+I);
		FOR I←0 STEP 1 UNTIL 50 DO FUNC(SAVBUF[I],36+I);
		END⊃;

α	HERE IS WHERE WE PUT ALL THESE GOOD VARIABLES;

SAFEX REAL ARRAY VARS[1:2,1:5,1:86];
α	VARIABLES AND COPYING PROCEDURES;

EXTERNAL INTEGER SETNUM,LENS,DATE,TIME,CAMNOM,LPTCH,BREAK,LPTON,SETFLG;
EXTERNAL REAL PPOT0,PPOTD,TPOT0,TPOTD,FPOT0,FPOTD,TOLER,FOCAL,OFFSET,FSCALE,
	ZPOT0,ZPOTD,FMX,FMY,MRAT,PAN,TILT,SWING,CALERR,PANPTR,TILPTR,
	FOCPTR,ZOOPTR,MFOCNM,POLERR,REFPTR,GROREF,DEV;
SAFEX EXTERNAL REAL ARRAY DP[1:3],C,P0[1:3],COEFF,PP[1:2];
SAFEX EXTERNAL INTEGER ARRAY SAVBUF, STNBUF[0:50];
LABEL XT;
STRING OP;
SHORT INTEGER J, I, K, COPX, COPA, LENSA;

SIMPLE PROCEDURE A_TO_A;
	BEGIN INTEGER L,M;
	L ← LENS;
	M ← LENSA;
	IF COPX=2 THEN LENS←1;
	IF COPA=2 THEN LENSA←1;
	COPY(ARY_TO_ARY);
	LENS←L;
	LENSA←M;
	END;

SIMPLE PROCEDURE V_TO_A;
	BEGIN INTEGER L;
	L ← LENS;
	IF COPX=2 THEN LENS←1;
	COPY(VAR_TO_ARY);
	LENS ← L;
	END;

SIMPLE PROCEDURE A_TO_V;
	BEGIN INTEGER L;
	L ← LENS;
	IF COPX=2 THEN LENS←1;
	COPY(ARY_TO_VAR);
	LENS ← L;
	END;

SIMPLE PROCEDURE DIF;
	BEGIN INTEGER L;
	L ← LENS;
	IF COPX=2 THEN LENS←1;
	COPY(DIFFERENCE);
	LENS ← L;
	END;
α	PARSE SPECIFICATIONS - FALSE IF ERROR;

SIMPLE BOOLEAN PROCEDURE PARSE(REFERENCE BOOLEAN NEWY;REFERENCE INTEGER LENS);
	BEGIN INTEGER CHAR;
	WHILE (CHAR ← LOP(OP))=" " DO;
	IF CHAR="O" THEN NEWY←FALSE ELSE IF CHAR="N" THEN NEWY←TRUE ELSE
		RETURN(FALSE);
	CHAR ← LOP(OP);
	IF "1"≤CHAR≤"5" THEN LENS ← CHAR-"0" ELSE RETURN(FALSE);
	RETURN(TRUE);
	END;

α	THIS MAKES STRING 10 CHARACTERS LONG WITH A BLANK ON THE FRONT;

SIMPLE STRING PROCEDURE LN(STRING STR);
	RETURN(" "&("          "&STR)[∞-8 TO ∞]);

α	THIS MAKES 10 CHAR STRING OF AN INTEGER;

SIMPLE STRING PROCEDURE INTDPY(INTEGER I);
	RETURN(LN(CVS(I)));

α	THIS MAKES 10 CHAR STRING OF A REAL;

SIMPLE STRING PROCEDURE REALDPY(REAL R);
	RETURN(CVG(R));
α	DISPLAY ROUTINE;

PROCEDURE DISPLAY(STRING TITLE);
	BEGIN DEFINE RAD=⊂180.0/3.14157⊃;
	INTEGER F, L, I, J;
	STRING STR;
	SAFEX INTEGER ARRAY BUFFER[1:1000];
	SETFORMAT(2,6);
	DPYCLR;
	DPYSET(BUFFER);
	DPYTYP(-500,1,1);
	DPYBRT(7);
	DPYBIG(2);
	AIVECT(-300,450);
	DPYSST(TITLE&CRLF&CRLF);
	DPYSST(LN("CAMERA")&LN(IF CAMNOM=1 THEN "LENS" ELSE NULL));
	DPYSST("      FILE    ERROR       GROREF     DATE        TIME"&CRLF);
	DPYSST(INTDPY(CAMNOM)&(IF CAMNOM=1 THEN INTDPY(LENS) ELSE LN(NULL))&
		LN(IF COPX=NEWX THEN "NEW" ELSE "OLD")&"  "&REALDPY(CALERR)&
		REALDPY(GROREF)&DATIM&CRLF&CRLF);
	DPYSST("   PPOT0       PPOTD       TPOT0       TPOTD       FPOT0"&
		"       FPOTD"&CRLF);
	DPYSST(REALDPY(PPOT0)&REALDPY(PPOTD)&REALDPY(TPOT0)&REALDPY(TPOTD)&
		REALDPY(FPOT0)&REALDPY(FPOTD)&CRLF&CRLF);
	DPYSST((IF CAMNOM=2 THEN "   ZPOT0       ZPOTD    " ELSE NULL)&
		"   PP[1]       PP[2]       P0[1]       P0[2]       P0[3]"&
		CRLF);
	DPYSST((IF CAMNOM=2 THEN REALDPY(ZPOT0)&REALDPY(ZPOTD) ELSE NULL)&
		REALDPY(PP[1])&REALDPY(PP[2])&REALDPY(P0[1])&REALDPY(P0[2])&
		REALDPY(P0[3])&CRLF&CRLF);
	DPYSST("   DP[1]       DP[2]       DP[3]        C[1]        C[2]"&
		"        C[3]"&CRLF);
	DPYSST(REALDPY(DP[1])&REALDPY(DP[2])&REALDPY(DP[3])&
		REALDPY(C[1])&REALDPY(C[2])&REALDPY(C[3])&CRLF&CRLF);
	DPYSST("    MRAT       SWING         FMX         FMY"&
		(IF CAMNOM=2 THEN "         DEV    COEFF[1]    COEFF[2]" ELSE
		NULL)&CRLF);
	DPYSST(REALDPY(MRAT)&REALDPY(SWING)&REALDPY(FMX)&REALDPY(FMY)&
		(IF CAMNOM=2 THEN REALDPY(DEV)&	REALDPY(COEFF[1])&
		REALDPY(COEFF[2]) ELSE NULL)&CRLF&CRLF);
	DPYSST("     PAN        TILT       FOCAL      OFFSET       FSCALE"&CRLF);
	DPYSST(REALDPY(PAN*RAD)&REALDPY(TILT*RAD)&REALDPY(FOCAL)&REALDPY(OFFSET)&
		REALDPY(FSCALE)&CRLF&CRLF);
	DPYSST("DATA SETS ARE ");
	STR ← NULL;
	F ← 0;
	I ← -1;
	L ← SAVBUF[0];
	FOR J ← 1 STEP 1 UNTIL L DO
		BEGIN
		IF SAVBUF[J]≠I∨J=L THEN
			BEGIN
			IF F THEN STR←STR&CVS(F)&(IF I-1=F THEN NULL
				ELSE ":"&CVS(IF J=L THEN I ELSE I-1))&",";
			F ← I ← SAVBUF[J];
			END;
		I ← I+1;
		END;
	DPYSST(STR[1 TO ∞-1]&CRLF&CRLF&"TYPE CR TO CONTINUE");
	DPYOUT(1);
	INCHWL;
	SETFORMAT(0,6);
	DPYCLR;
	END;
α	READ AND WRITE COMPOSITE DATA SETS;
α	TRUE IF SET FOUND;

	DEFINE DATASET=⊂(IF CAMNOM=1 THEN "DATA1[CAL,HE]" ELSE
			"DATA2[CAL,HE]")⊃,
		DATA=⊂3⊃;

SIMPLE BOOLEAN PROCEDURE READ(INTEGER S);
	BEGIN INTEGER BRK, EOF;
	OPEN(DATA,"DSK",12,3,0,128,BRK,EOF);
	LOOKUP(DATA,DATASET,BRK);
	IF BRK THEN
		BEGIN
		OUTSTR(DATASET&" NOT FOUND"&CRLF);
		RETURN(FALSE);
		END;
	USETI(DATA,1);
	BRK←WORDIN(DATA);
α	READ AND WRITE COMPOSITE DATA SETS;
α	TRUE IF SET FOUND;

	DEFINE DATASET=⊂(IF CAMNOM=1 THEN "DATA1[CAL,HE]" ELSE
			"DATA2[CAL,HE]")⊃,
		DATA=⊂3⊃;

SIMPLE BOOLEAN PROCEDURE READ(INTEGER S);
	BEGIN INTEGER BRK, EOF;
	OPEN(DATA,"DSK",12,3,0,128,BRK,EOF);
	LOOKUP(DATA,DATASET,BRK);
	IF BRK THEN
		BEGIN
		OUTSTR(DATASET&" NOT FOUND"&CRLF);
		RETURN(FALSE);
		END;
	USETI(DATA,1);
	BRK←WORDIN(DATA);
	USETI(DATA,S);
	COMIN;
α	READ AND WRITE COMPOSITE DATA SETS;
α	TRUE IF SET FOUND;

	DEFINE DATASET=⊂(IF CAMNOM=1 THEN "DATA1[CAL,HE]" ELSE
			"DATA2[CAL,HE]")⊃,
		DATA=⊂3⊃;

SIMPLE BOOLEAN PROCEDURE READ(INTEGER S);
	BEGIN INTEGER BRK, EOF;
	OPEN(DATA,"DSK",12,3,0,128,BRK,EOF);
	LOOKUP(DATA,DATASET,BRK);
	IF BRK THEN
		BEGIN
		OUTSTR(DATASET&" NOT FOUND"&CRLF);
		RETURN(FALSE);
		END;
	USETI(DATA,1);
	BRK←WORDIN(DATA);
	USETI(DATA,S);
	COMIN;
	RELEASE(DATA);
	RETURN(TRUE);
	END;

SIMPLE	PROCEDURE WRITE;
	BEGIN INTEGER BRK,EOF, I;

	SIMPLE PROCEDURE WR(INTEGER I);
		BEGIN
		USETO(DATA,I);
		COMOUT;
		START_CODE OUTPUT DATA,0; END;
		END;

	OPEN(DATA,"DSK",12,0,3,128,BRK,EOF);
	ENTER(DATA,DATASET,BRK);
	USETO(DATA,1);
	WORDOUT(DATA,BRK);
	COPX ← OLD;
	IF CAMNOM=1 THEN FOR I←1 STEP 1 UNTIL 4 DO
		BEGIN
		LENS ← I;
		A_TO_V;
		WR(I);
		END ELSE BEGIN
		LENS ← 1;
		A_TO_V;
		WR(1);
		END;
	RELEASE(DATA);
	END;
α	HERE IS THE MAIN PROGRAM;

	SETFORMAT(0,6);
	CAMNOM ← 1;
	FOR LENS←1 STEP 1 UNTIL 4 DO
		BEGIN 
		COPX ← NEWX;
		IF COMREAD THEN V_TO_A;
		COPX ← OLD;
		IF READ(LENS) THEN V_TO_A;
		END;
	CAMNOM ← 2;
	COPX ← NEWX;
	LENS ← 1;
	IF COMREAD THEN V_TO_A;
	COPX ← OLD;
	IF READ(1) THEN V_TO_A;
	WHILE TRUE DO
		BEGIN "LOOP"
		DEFINE INIT=⊂IF ¬PARSE(K,J) THEN GO XT;
			     LENS ← IF J<5 THEN J ELSE 1;
			     CAMNOM ← IF J=5 THEN 2 ELSE 1;
			     COPX ← IF K THEN NEWX ELSE OLD⊃,
		       CAMDIF=⊂(IF COPX=NEWX THEN "NEW" ELSE "OLD")&
			     " SET FOR CAMERA "&CVS(CAMNOM)&
			     (IF CAMNOM=1 THEN ", LENS "&CVS(LENS) ELSE NULL)⊃;

		OUTSTR(CRLF&"*");
		OP ← INCHWL;
		WHILE (I ← LOP(OP))=" " DO;
		INIT;
		IF I="R" THEN
			BEGIN "READ"
			J←IF ¬K THEN READ(LENS) ELSE COMREAD;
			IF J THEN V_TO_A;
			END "READ" ELSE
		IF I="W" THEN
			BEGIN "WRITE"
			A_TO_V;
			IF ¬K THEN WRITE ELSE COMWRITE;
			END "WRITE" ELSE
		IF I="L" THEN
			BEGIN "LIST"
			A_TO_V;
			LPTDMP;
			END "LIST" ELSE
		IF I="S" THEN
			BEGIN "SHOW"
			A_TO_V;
			DISPLAY(CAMDIF);
			END "SHOW" ELSE
		IF I="D" THEN
			BEGIN "DIFFER" STRING STR;
			A_TO_V;
			STR←"DIFFERENCE: "&CAMDIF&" - ";
			INIT;
			DIF;
			STR ← STR&CAMDIF;
			CAMNOM ← DATE ← TIME ← 0;
			DISPLAY(STR);
			END "DIFFER" ELSE
		IF I="C" THEN
			BEGIN "COPY" STRING STR;
			STR←"COPY: "&CAMDIF&" FROM ";
			COPA ← COPX;
			LENSA ← LENS;
			INIT;
			A_TO_A;
			OUTSTR(STR&CAMDIF&CRLF);
			END "COPY" ELSE
XT:		OUTSTR("??");
		END "LOOP";
	END "DATRAN";